Excel VBA 拆分工作薄-数组方法

浮云Excel分享 2018-06-27 10:23:07

网友有这样一个表格:

Excel VBA 拆分工作薄-数组方法

B~K列每行有1000+的数据,需把每列最后单元格网上500个数据,分配到指定文件夹的各指定工作簿的A列。(注:每个文件夹中包含相同的工作簿)

具体的要求如下:

把B列最后单元格往上500个数据,填入工作簿名"白色"的A列。

把C列最后单元格往上500个数据,填入工作簿名"金丝"的A列。

把D列最后单元格往上500个数据,填入工作簿名"银丝"的A列。

把E列最后单元格往上500个数据,填入工作簿名"咖啡色"的A列。

把F列最后单元格往上500个数据,填入工作簿名"黑金刚"的A列。

把G列最后单元格往上500个数据,填入工作簿名"天蓝色"的A列。

把H列最后单元格往上500个数据,填入工作簿名"浅蓝色"的A列。

把I列最后单元格往上500个数据,填入工作簿名"橘黄色"的A列。

把J列最后单元格往上500个数据,填入工作簿名"雪牙色"的A列。

把K列最后单元格往上509个数据,填入工作簿名"浅咖啡色"的A列。

根据要求,整理一下思路如下:

把每列的最后500个数据放入数组(数组的赋值)

按照Q2单元格给的文件夹名称,打开对应文件夹下面对应的工作薄(打开工作薄)

把放入了500个数据的数组,赋值给对应的表格(读取数组的值)

自动关闭表格(关闭工作薄

重复上述步骤

思路有了,但是也有最大一个难点:如何保证读取了B列的数据,确定保证能打开“白色”的工作表

先看一下已经写好的代码运行结果:

Excel VBA 拆分工作薄-数组方法

具体代码如下:

代码解析:

1.把文档的名称全部放入brr数组。

2.ThisWorkbook.Path 表示获取当前打开文档的路径。

3.Workbooks(str & ".xlsx").Close SAVECHANGES:=True 表示关闭后确认。

4.Erase arr 表示清空数组


Sub HCH()
	'关闭保存时弹出的警告窗口
	Application.DisplayAlerts  = False
	'关闭屏幕刷新
	Application.ScreenUpdating = False
	'定义参数及数组
	Dim i
	Dim num
	Dim str
	Dim arr
	Dim brr()

	For num = 2 To 11
		'提出列结果的最后一列
		i   = Sheet1.Cells(1, num).End(xlDown).Row
		'需要使用的最后500行数据,放入arr数组
		arr = Range(Cells(i - 499, num), Cells(i, num))
		'文档的名称放入数组
		brr = Array("白色", "金丝", "银丝", "咖啡色", "黑金刚", "天蓝色", "浅蓝色", "橘黄色", "雪牙色", "浅咖啡色")
		str = brr(num - 2)
		'跟随for循环打开文档
		Workbooks.Open ThisWorkbook.Path & "" & Range("Q1") & "" & str & ".xlsx"
		Sheets(1).Activate
		'把需要的数据,进行赋值
		Range("A1:A500") = arr
		'关闭文件并保存
		Workbooks(str & ".xlsx").Close SAVECHANGES: = True
		'清空arr数组,为重新赋值做准备
		Erase arr
	Next

	'打开保存时弹出的警告窗口
	Application.DisplayAlerts = True
	'打开屏幕刷新
	Application.ScreenUpdating = True
End Sub
本页共68段,1608个字符,3130 Byte(字节)